#include "win1_login.h"

/* 获取当前活动屏幕的宽高 */
#define scr_act_width() lv_obj_get_width(lv_scr_act())
#define scr_act_height() lv_obj_get_height(lv_scr_act())

static lv_obj_t *keyboard;    /* 键盘 */
static lv_obj_t *label_name;  /* 用户名正误提示标签 */
static lv_obj_t *label_pass;  /* 密码正误提示标签 */
static const lv_font_t *font; /* 定义字体 */

static lv_obj_t *face_img; /* 管理员登录按钮 */
static lv_obj_t *init_btn2; /* 用户登录按钮 */
static lv_obj_t *init_btn3; /* 网络连接设置按钮 */
static lv_obj_t *win1_Init; /* 退出按钮 */

static char txt_user[128] = {0};     /* 用户名 */
static char txt_password[128] = {0}; /* 密码 */

lv_obj_t *win1 = NULL;
lv_obj_t *net_workLoading = NULL; /* 网络连接加载动画 */

/**
 * @brief  用户名文本框事件回调
 * @param  *e ：事件相关参数的集合，它包含了该事件的所有数据
 * @return 无
 */
static void PRO1_WIN1_NameTextAreaEventCB(lv_event_t *e)
{
    lv_event_code_t code = lv_event_get_code(e); /* 获取事件类型 */
    lv_obj_t *target = lv_event_get_target(e);   /* 获取触发源 */

    if (code == LV_EVENT_FOCUSED) /* 事件类型：被聚焦 */
    {
        lv_label_set_text(label_name, ""); /* 点击文本框后，提示词消失 */
        lv_label_set_text(label_pass, "");

        lv_obj_clear_flag(keyboard, LV_OBJ_FLAG_HIDDEN); /* 将隐藏键盘的重新显示 */
        lv_keyboard_set_textarea(keyboard, target);      /* 关联用户名文本框和键盘 */
    }

    else if (code == LV_EVENT_DEFOCUSED) /* 事件类型：未被聚焦 */
    {
        lv_obj_add_flag(keyboard, LV_OBJ_FLAG_HIDDEN); /* 隐藏键盘 */
    }

    else if (code == LV_EVENT_VALUE_CHANGED) /* 事件类型：文本框的内容发生变化 */
    {
        strcpy (txt_user ,lv_textarea_get_text(target)); /* 获取文本框的文本 */
    }
}

/**
 * @brief  密码文本框事件回调
 * @param  *e ：事件相关参数的集合，它包含了该事件的所有数据
 * @return 无
 */
static void PRO1_WIN1_PasswaordTextAreaEventCB(lv_event_t *e)
{
    lv_event_code_t code = lv_event_get_code(e); /* 获取事件类型 */
    lv_obj_t *target = lv_event_get_target(e);   /* 获取触发源 */

    if (code == LV_EVENT_FOCUSED) /* 事件类型：被聚焦 */
    {
        lv_label_set_text(label_name, ""); /* 点击文本框后，提示词消失 */
        lv_label_set_text(label_pass, "");

        lv_obj_clear_flag(keyboard, LV_OBJ_FLAG_HIDDEN); /* 将隐藏键盘的重新显示 */
        lv_keyboard_set_textarea(keyboard, target);      /* 关联用户名文本框和键盘 */
    }

    else if (code == LV_EVENT_DEFOCUSED) /* 事件类型：未被聚焦 */
    {
        lv_obj_add_flag(keyboard, LV_OBJ_FLAG_HIDDEN); /* 隐藏键盘 */
    }

    else if (code == LV_EVENT_VALUE_CHANGED) /* 事件类型：文本框的内容发生变化 */
    {
        strcpy(txt_password , lv_textarea_get_text(target)); /* 获取文本框的文本 */
    }
}

/**
 * @brief  按钮登录
 * @param  *e ：事件相关参数的集合，它包含了该事件的所有数据
 * @return 无
 */
static void PRO1_WIN1_LoginBtnEventCB(lv_event_t *e)
{
    lv_event_code_t code = lv_event_get_code(e); /* 获取事件类型 */
    // lv_obj_t *target = lv_event_get_target(e);                             /* 获取触发源 */

    if (code == LV_EVENT_CLICKED) /* 事件类型：文本框的内容发生变化 */
    {
        if (net_comm_logo == 1)
        {
            char str[255] = {0};
            sprintf(str, "%s,%s", txt_user, txt_password);
            if (RDWR_login(str) == 1) /* 判断密码是否正确 */
            {
                printf ("密码正确\n");
            }
            else
            {
                lv_label_set_text(label_name, LV_SYMBOL_CLOSE); /* 密码错误，显示X*/
                lv_obj_set_style_text_color(label_name, lv_color_hex(0xff0000), LV_PART_MAIN);

                lv_label_set_text(label_pass, LV_SYMBOL_CLOSE); /* 密码错误，显示X*/
                lv_obj_set_style_text_color(label_pass, lv_color_hex(0xff0000), LV_PART_MAIN);
            }
        }
    }
}

/**
 * @brief  用户登录界面
 * @param  无
 * @return 无
 */
void PRO1_WIN1_UserLogin(void)
{
    /* 根据屏幕大小设置字体 */
    if (scr_act_width() <= 320)
    {
        font = &lv_font_montserrat_12;
    }
    else if (scr_act_width() <= 480)
    {
        font = &lv_font_montserrat_14;
    }
    else
    {
        font = &lv_font_montserrat_16;
    }

    /* 中文字体设置 */
    lv_font_t *font_hz = lv_freetype_font_create("/root/simkai.ttf",
                                                 LV_FREETYPE_FONT_RENDER_MODE_BITMAP,
                                                 26,
                                                 LV_FREETYPE_FONT_STYLE_NORMAL);
    if (!font_hz)
    {
        LV_LOG_ERROR("freetype font create failed.");
        return;
    }

    /*Create style with the new font*/
    static lv_style_t style;
    lv_style_init(&style);
    lv_style_set_text_font(&style, font_hz);
    lv_style_set_text_align(&style, LV_TEXT_ALIGN_CENTER);

    /* 界面1 */
    win1 = lv_obj_create(lv_scr_act());
    lv_obj_set_size(win1, scr_act_width() * 0.5, scr_act_height() * 0.9);
    lv_obj_align(win1, LV_ALIGN_CENTER, 0, 0);

    /* 用户登录头像 */
    lv_obj_t *img = lv_image_create(win1);
    lv_image_set_src(img, "A:my_data/用户图像2.png");
    lv_obj_align(img, LV_ALIGN_CENTER, 0, -scr_act_height() * 0.3);

    /* 用户登录标签 */
    lv_obj_t *label_login = lv_label_create(win1);                           /* 定义并创建标签 */
    lv_obj_add_style(label_login, &style, 0);                                /* 设置字体 */
    lv_label_set_text(label_login, "用户登录");                              /* 设置标签文本 */
    lv_obj_align(label_login, LV_ALIGN_CENTER, 0, -scr_act_height() * 0.15); /* 设置标签位置 */

    /* 用户名文本框 */
    lv_obj_t *textarea_name = lv_textarea_create(win1);                                    /* 创建文本框 */
    lv_obj_set_size(textarea_name, scr_act_width() * 0.35, scr_act_height() * 0.12);       /* 设置宽度 */
    lv_obj_set_style_text_font(textarea_name, font, LV_PART_MAIN);                         /* 设置字体 */
    lv_obj_align(textarea_name, LV_ALIGN_CENTER, 0, 0);                                    /* 设置位置 */
    lv_textarea_set_one_line(textarea_name, true);                                         /* 设置单行模式 */
    lv_textarea_set_max_length(textarea_name, 6);                                          /* 设置输入字符的最大长度 */
    lv_textarea_set_placeholder_text(textarea_name, "user name");                          /* 设置占位符 */
    lv_obj_add_event_cb(textarea_name, PRO1_WIN1_NameTextAreaEventCB, LV_EVENT_ALL, NULL); /* 添加文本框事件回调 */

    /* 用户名正误提示标签 */
    label_name = lv_label_create(win1);                                       /* 创建标签 */
    lv_label_set_text(label_name, "");                                        /* 默认不提示 */
    lv_obj_set_style_text_font(label_name, font, LV_PART_MAIN);               /* 设置字体 */
    lv_obj_align_to(label_name, textarea_name, LV_ALIGN_OUT_RIGHT_MID, 5, 0); /* 设置位置 */

    /* 密码文本框 */
    lv_obj_t *textarea_pass = lv_textarea_create(win1);                                               /* 创建文本框 */
    lv_obj_set_size(textarea_pass, scr_act_width() * 0.35, scr_act_height() * 0.12);                  /* 设置宽度 */
    lv_obj_set_style_text_font(textarea_pass, font, LV_PART_MAIN);                                    /* 设置字体 */
    lv_obj_align_to(textarea_pass, textarea_name, LV_ALIGN_OUT_BOTTOM_MID, 0, scr_act_height() / 20); /* 设置位置 */
    lv_textarea_set_one_line(textarea_pass, true);                                                    /* 设置单行模式 */
    lv_textarea_set_password_mode(textarea_pass, true);                                               /* 设置密码模式 */
    lv_textarea_set_password_show_time(textarea_pass, 1000);                                          /* 设置密码显示时间 */
    lv_textarea_set_max_length(textarea_pass, 8);                                                     /* 设置输入字符的最大长度 */
    lv_textarea_set_placeholder_text(textarea_pass, "password");                                      /* 设置占位符 */
    lv_obj_add_event_cb(textarea_pass, PRO1_WIN1_PasswaordTextAreaEventCB, LV_EVENT_ALL, NULL);       /* 添加文本框事件回调 */


    /* 密码正误提示标签 */
    label_pass = lv_label_create(win1);                                       /* 创建标签 */
    lv_label_set_text(label_pass, "");                                        /* 默认不提示 */
    lv_obj_set_style_text_font(label_pass, font, LV_PART_MAIN);               /* 设置字体 */
    lv_obj_align_to(label_pass, textarea_pass, LV_ALIGN_OUT_RIGHT_MID, 5, 0); /* 设置位置 */

    /* 登录密码按钮 */
    lv_obj_t *btn_login = lv_btn_create(win1);                                                    /* 创建加速按钮 */
    lv_obj_set_size(btn_login, scr_act_width() * 0.30, scr_act_height() * 0.1);                   /* 设置按钮大小 */
    lv_obj_align_to(btn_login, textarea_pass, LV_ALIGN_OUT_BOTTOM_MID, 0, scr_act_height() / 20); /* 设置按钮位置 */
    lv_obj_add_event_cb(btn_login, PRO1_WIN1_LoginBtnEventCB, LV_EVENT_CLICKED, NULL);            /* 设置按钮事件 */

    lv_obj_t *btn_label_login = lv_label_create(btn_login); /* 创建减速按钮标签 */
    lv_obj_add_style(btn_label_login, &style, 0);           /* 设置字体 */
    lv_label_set_text(btn_label_login, "登录");             /* 设置标签文本 */
    lv_obj_set_align(btn_label_login, LV_ALIGN_CENTER);     /* 设置标签位置 */

    /* 键盘 */
    keyboard = lv_keyboard_create(lv_scr_act());                      /* 创建键盘 */
    lv_obj_set_size(keyboard, scr_act_width(), scr_act_height() / 2); /* 设置大小 */
    lv_obj_add_flag(keyboard, LV_OBJ_FLAG_HIDDEN);                    /* 隐藏键盘 */
    // lv_obj_del(keyboard);                                                                         /* 删除键盘 */
}

static void WIN1_Init_cd(lv_event_t *e)
{
    lv_obj_t *target = lv_event_get_target(e); // 同一个按钮发出不同不同事件
    if (target == win1_Init)                   // 开启贩卖机
    {
        if (net_comm_logo == 1)
        {
            lv_obj_del(win1_Init);
            win3_sell();
        }
    }
    if (target == init_btn2) // 管理员登入按钮
    {
        lv_obj_del(win1_Init);
        PRO1_WIN1_UserLogin();
    }
}
//
void WIN1_Init_face()
{
    pthread_t read_pd;
    pthread_create(&read_pd, NULL, REWR_read, NULL);
    win1_Init = lv_obj_create(lv_scr_act());
    lv_obj_set_size(win1_Init, 800, 480);
    lv_obj_align(win1_Init, LV_ALIGN_CENTER, 0, 0);
    lv_obj_set_style_pad_all(win1_Init, 0, 0);
    lv_obj_clear_flag(win1_Init, LV_OBJ_FLAG_SCROLLABLE);
    lv_obj_add_event_cb(win1_Init, WIN1_Init_cd, LV_EVENT_CLICKED, NULL);

    face_img = lv_img_create(win1_Init);
    LV_IMG_DECLARE(init_face);
    lv_img_set_src(face_img, &init_face);
   

    init_btn2 = lv_btn_create(win1_Init);
    lv_obj_set_size(init_btn2, 100, 50);
    lv_obj_align(init_btn2, LV_ALIGN_TOP_LEFT, 0, 0);
    lv_obj_add_event_cb(init_btn2, WIN1_Init_cd, LV_EVENT_CLICKED, NULL);
    lv_obj_t *label_login = lv_label_create(init_btn2); /* 设置字体 */
    lv_label_set_text(label_login, "user login");
}

void WIN1_net_comm() // 网络连接加载界面
{
    pthread_t net_pt;
    pthread_create(&net_pt, NULL, NET_comm, NULL);
    style_init();
    net_workLoading = lv_spinner_create(lv_scr_act());
    // lv_spinner_set_anim_params(ui_Spinner1, 1000, 90);
    lv_obj_set_width(net_workLoading, 80);
    lv_obj_set_height(net_workLoading, 80);
    lv_obj_set_align(net_workLoading, LV_ALIGN_CENTER);
    lv_obj_remove_flag(net_workLoading, LV_OBJ_FLAG_CLICKABLE);

    lv_obj_t *ui_Label1 = lv_label_create(lv_scr_act());
    lv_label_set_text(ui_Label1, "wangluoliangjing");
    lv_obj_align_to(ui_Label1, net_workLoading, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);
}
